/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tsb.arrastrar;

import java.awt.Component;
import java.awt.Point;
import java.util.Iterator;
import java.util.LinkedList;

public class BotonPersonalizado extends javax.swing.JButton {
    
    public static final int PC=1;
    public static final int Servidor=2;
    public static final int Impresora=3;
    public static final int router=4;
    
    private int tipoDispositivo;
    private Point ubicacion;
    private PanelPrincipalV2 panelPrincipal=null;
    
    private LinkedList<Conexion> conexiones = new LinkedList<Conexion>();
    
    
    
    public BotonPersonalizado(String nombre, int tipo, Point ubicacion)
    {
         this.tipoDispositivo=tipo;
         this.ubicacion=ubicacion;
         
         switch(tipoDispositivo)
         {
             case 1: 
                 this.setIcon(new javax.swing.ImageIcon(getClass().getResource("/tsb/arrastrar/computer.png")));
                 break;
             case 2: 
                 this.setIcon(new javax.swing.ImageIcon(getClass().getResource("/tsb/arrastrar/Freeboxv5.png")));
                     break;
             case 3:
                 break;
             case 4:
                 break;
         }
         
         this.setBorder(null);
         this.setBackground(new java.awt.Color(255, 255, 255));
         this.setText("PC-1");
         this.setContentAreaFilled(false);
         this.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
         this.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
         this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
         
          this.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                MousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                MouseReleased(evt);
            }
        });
          
        this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                MouseDragged(evt);
            }
        });
    }

    public void setPanelPrincipal(PanelPrincipalV2 panelPrincipal) {
        this.panelPrincipal = panelPrincipal;
    }
    
    public void addConexion(Conexion c)
    {
        this.conexiones.add(c);
    }

    public Point getUbicacion() {
        return ubicacion;
    }

    public void setUbicacion(Point ubicacion) {
        this.ubicacion = ubicacion;
    }
   
    
        
    private void MousePressed(java.awt.event.MouseEvent evt) {
        
       if(this.panelPrincipal.getSeEstaConectando())//se esta conectando?
       {
            this.panelPrincipal.empiezaDibujar(this.ubicacion);
            this.panelPrincipal.repaint();
            repaint();
       }
       else
       {//No se esta conectando
           if(this.conexiones.size()>0)
           {//Si tiene conexiones
               
               repaint();
           }
       }
    }
     
      private void MouseReleased(java.awt.event.MouseEvent evt) {
          
          if(this.panelPrincipal.getSeEstaConectando())//Se esta conectando
          {//Si
              Point p= new Point(evt.getX()+evt.getComponent().getLocation().x,evt.getY()+evt.getComponent().getLocation().y);
              
              BotonPersonalizado b=this.panelPrincipal.hayUnBoton(p);//boton donde termino la conexion
              
              if(b!=null)
              {
                  this.panelPrincipal.terminaDibujar();
                  
                  Conexion c=this.panelPrincipal.getConexionActual();
                  c.setFin(b.getUbicacion());
                  b.addConexion(c);
                  this.addConexion(c);
                  this.panelPrincipal.conexionActualNull();
              }
               else
              {
                  this.panelPrincipal.conexionActualNull();
              }
          
          }
          else
          {//NO se esta conectando
              if(this.conexiones.size()>0)
              {//si
                  this.panelPrincipal.terminaDibujar2();
              
              }
              else
              {//N

              }
                  
              //NO borrar esto!!!!!
              //  VentanaPC vpc = new VentanaPC("PC-1");
              //  vpc.setVisible(true);
              
          }

      }
      
       private void MouseDragged(java.awt.event.MouseEvent evt) {
            
            if(this.panelPrincipal.getSeEstaConectando())//se esta conectando?
            {//Si
                this.panelPrincipal.dibuja(new Point(evt.getComponent().getLocation().x+evt.getX(),evt.getComponent().getLocation().y+evt.getY()));
                this.repaint();
             
            }
            else
            {//No
                if(this.conexiones.size()>0)//el dispositivo tiene conecccion
                {//Si
                    //mover dispositivo y dibujar
                    BotonPersonalizado b= (BotonPersonalizado)evt.getComponent();
                    int xAnterior= (int)b.getUbicacion().getX();
                    int yAnterior=  (int)b.getUbicacion().getY();
                    
                    b.setLocation(b.getX()+evt.getX()-50, b.getY()+evt.getY()-50);
                    
                    int x=(int)(this.getUbicacion().getX()+evt.getX()-50);
                    int y=(int)(this.getUbicacion().getY()+evt.getY()-50);
                    
                    this.setUbicacion(new Point(x,y));
                    
                    
                    Iterator iter= this.conexiones.iterator();
                    while(iter.hasNext())
                    {
                        Conexion c= (Conexion)iter.next();
                        
                        if(xAnterior==c.getIni().getX() && yAnterior==c.getIni().getY())
                        {//el boton es el inicio
                            c.setIni(this.ubicacion);
                        }
                        else
                        {
                            c.setFin(this.ubicacion);
                        }
                    }
                    
                    this.panelPrincipal.dibuja2(new Point(evt.getComponent().getLocation().x+evt.getX(),evt.getComponent().getLocation().y+evt.getY()), this.getUbicacion());

                    this.repaint();
                }
                else
                {//no
                    //mover dispositivo
                    javax.swing.JButton b= (javax.swing.JButton)evt.getComponent();
                    b.setLocation(b.getX()+evt.getX()-50, b.getY()+evt.getY()-50);
                    
                    this.setUbicacion(new Point(evt.getComponent().getLocation().x+evt.getX(),evt.getComponent().getLocation().y+evt.getY()));
                }
            }

       }
       
//      
     private Point centroDeBoton(Component c)
     {
         
         int altoBoton =(int) c.getSize().getHeight();
         int anchoBoton =(int) c.getSize().getWidth();
         int x = c.getLocation().x+anchoBoton/2;
         int y= c.getLocation().y+altoBoton/2;
         return new Point(x,y);
     }

}
